perm filename SCHED[P,JRA]2 blob
sn#560943 filedate 1981-01-30 generic text, type C, neo UTF8
COMMENT ā VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 Part one: Functions as passive objects
C00009 00003 Part two: Functions as active objects
C00011 00004 The Art of Computer Science: Undergraduate Special Topics Course
C00016 00005 The Art of Computer Science
C00021 00006 What do personal computing, artificial intelligence, LOGO, Smalltalk,
C00025 ENDMK
Cā;
Part one: Functions as passive objects
1 Notation
The role of notation in science
expressivity
subordination of detail
economy
amenability to proof
The impact of computing on notation
executability
representability of algorithms
The difficulties with programming languages
Computation and interaction
The relationship between language and its medium
why computing languages cannot be separated
from the programming env
cf. conversation and understanding
The polarization between interaction and discipline
pascal vs. lisp vs. ucsd pascal vs smalltalk
The polarization between rigor and hacking
basic vs. (lisp/scheme)
2 The language
3 Data domain: The whole numbers
Algorithmic notation
conditional expressions
definitions
recursion
numerical examples
computation as deduction
axioms for number theroy
rules of inference
substitution and simplification
number theory
conditional
the concept of proof
equivalence
termination
Data Domain: symbolic expressions
the representability of programs
abstract objects
constructors, selectors, and recognizers
The mapping of expressions to data structures
Non-numeric computation: examples
evaluation of polynomials
simplification of algebraic expressions
propositional logic: evaluation
?theorem proving
binary trees (l-n-r) rep, sort, add, del
missionaries and cannibal
game stuff
4 Evaluation
5 Deduction vs computation, again
systems for substitution and simplification
computation as controlled deduction
call-by-name vs. call-by-value
Semantics of programming languages
Representability of programs
a detailed discussion
An evaluation algorithm
The operational view
Implementation strategies
call-by-value
weak vs. strong conditional
simulation of substitution
extending the evaluator
macros and read-macros: abbreviational convenience
iteration: language extension and special forms
6 A modern LISP: more data structuring
7 The idea of "first-class data"
implementation-driven languages violate notational principles
arbitrary precision numbers
Strings
Arrays
property-lists (flex records)
8 Property-lists and message passing
classes as properties
algorithms as message passing
hieracharies and flavors
hierarchies as implementation simplification
9 Object-oriented programming
10 Smalltalk and Actors
11 Lexical vs dynamic scoping: the beginnings of active functions
Evaluation revisited
functionals
the difficulty with functional arguments
variables: local, free, global
added complexity of functional values
12 Control: function vs algorithm
an analysis of the evaluator
the run-time structure
stacks
stacks+access and control links
tree access, control stack
tree access, tree control
13 Applicative v.s. imperative
control as a programming tool
side-effects
assignment, rplaca, rplacd
14 Implementation considerations
implementation of the evaluation process
read
parsers and scanners
searching and hashing
print
runtime language support
i-j pairs
shallow versus deep
run-time data support
numbers
arbitrary precision numbers
trees
programmer maintained
reference counting
garbage collection
mark sweep
copy-compacting
cheney
baker
henry&carl
15 Machines and compiling
16 The LISP machine
Traditional machines as microcode
Compilation
program representation
list structure
scheme hacks
p-code/byte code/MACRO
machine specific
Hardware
LISP machine
Scheme chips
14 The Racks paper: a bridge from passive to active
Part two: Functions as active objects
1 Functions as first-class objects
Relationship between
purity:lexical and
utility: dynamic
interactive creation of functional objects
programming in "levels"
2 Applications of functional objects
car,cdr, cons as:
1. arrays and functional
2. pure functional (t, f)
3. 1 as msg passing
3 stacks as functionals (gls/gjs)
4 multiprocessing (wand/aip)
5 Evaluation of Functionals
evaluators for full funarg
evaluators for smalltalk (ingalls)
6 Applications of lisp-related computing
cad
nl
business data bases --must do much better here
7 The future of computing
interactive programming
language designs
theory
ai applications
The Art of Computer Science: Undergraduate Special Topics Course
The point of the course is to present the fundamental notions of
computing.
The course has the same general characteristic as that of the functional
programming class, but will use a curriculum based on access to
interactive personal computers as the primary tool for gaining fluency
with the concepts and gaining an understanding of interactive computing.
The notions of computing are quite simple, yet the contemporary approach
tends to obfuscate rather than illuminate. At the concept level, simple
ideas become buried in syntax: algorithms are confused with programming
language syntax; computation is confused with compiling; compiling is
confused with syntax analysis.
On the technological side, the Practice of computing suffers from the dead
weight of twenty years of batch processing. "Glass teletypes" create card
decks and text editors manipulate card images. Alas, certain computing
"methodologies" even glory in the "discipline" that such primitive
interaction forces one to endure.
Without an understanding of fundamental concepts, and saddled with the
outdated and stilted programming techniques, it is not suprising that
computer-related productivity is falling.
Fortunately, the intellectual legacy of mathematical logic and be coupled
with a few insights of modern computing to supply an adequate foundation
for modern computing. The missing ingredient in the traditional setting
was the baroque computing engine that logicians used; a Turing machine is
a dreadful architecture. The fundamentals of the new formalism were
discussed by John McCarthy twenty years ago, and have been the basis of
the programming language named LISP. The new ingredient is the development
of the personal computing environment. One cannot effectively learn about
computing without practicing the art. Until recently, appropriate tools
for computing "practice" have been restricted to research establishments
for at least two reasons. First, many of the ideas about effective
interactive environments have been the subject of research; secondly, and
more immediate, the cost of these components has been extraordinally high.
Technology has changed that second consideration, and the research ideas
have reached a synthesis stage. The time is therefore ripe to move the
intellectual and methodological and technological results into the
educational domain. That is the intent of this course.
The Art of Computer Science
This course is a challenge. I plan to challenge your conception of what
computing is about, to challenge the traditional view of the purpose
programming languages, to challenge the usual conception of how one does
programming, to challenge the traditional curriculum of computing, and in
general to challenge your minds.
The course is neither mathematics nor engineering; it draws from both
disciplines, as does all of computer science. The intent of the course is
to investigate the phenomena called computing at a level of abstraction
that will allows us to explicate fundamental principles that underlie
computing theory and practice.
The texts for this course are (1) My notes, (2) "Zen and the Art of
Motorcycle maintenance", and (3) "Mindstroms: Computers, Children, the
and Powerful Ideas"
programming lab notes.
These class notes form the main structure of the technical and
"meta-computational" perspective that supports the inquiry. "Zen" has
valuable insights in the relationships between art and science, besides
the appropriate "tone" for this course. "Godel, Escher, Bach" is good fun;
an exemplary book showing how one can present complex ideas in an
intuitive, yet faithful, setting. Much of "GEB" will show up in this
course.
A lab session is associated with this course. Since part of our
exploration involves computing, it is a requirement that one understands
the art of computing --oftern called "programming". Learning to program is
like learning to drive --both can profit from classroom work that explains
basic concepts. However both require "hands-on" experience before one
really gets "the feel" of the instrument. As with driving school, we
should supply the students with the best available vehicles and guide them
in the process of applying the theory.
There are two important practical lessons in the programming experience:
first to develop an appreciation for abstraction and abstract programming,
and second to develop an understanding of how interactive programming
differs from the traditional "batch" (or modified "batch")-procesing view.
Abstract object-oriented programming carried out in an interactive
programming environment is the future of applied computing.
The course will be a "mind-stretcher", investigating: computation, proof,
and truth; computing formalism and mathematical notation; recursion in
logic and computing; abstract algorithms and objects; symbolic computation
and Godel numbering; evaluation and LISP machines; algorithms as data;
data as algorithms; compilation and LISP machines; pattern-directed
computation and logic; interactive computing versus "discipline";
implementation of LISP-like languages.
The course will be self-contained: no prerequsites other than a healthy
intellectual curiousity and the self-discipline to think.
What do personal computing, artificial intelligence, LOGO, Smalltalk,
LISP, Rubik's Cube, Robert Pirsig, Doug Hofstadter, Oswald Spengler, and
Seymour Papert have in common? EECS 129.
LISP is the premier language for artificial intelligence development.
Smalltalk is a powerful personal computing language developed at Xerox
PARC.
LOGO is a language similar to Smalltalk, built at MIT and based on LISP.
Rubik's Cube is the mind-bending puzzle, whose solution exists as a LISP
program, complete with a color graphics solution on a LISP Machine.
Pirsig, the author of "Zen and the Art of Motorcycle Maintenance" deals
with the issuse of quality and its realtionship to art and science.
Hofstadter wrote the Pulitzer Prize winning "Godel, Escher, Bach". This
work relates logic, art, and music in a interesting journey into the
recursive world.
"The Decline of the West" by Spengler is a "meta-Hofstatder", discussing
the rise and fall of Cultures in terms of their vison of mathematics. Do
computers signify the death of a Civilization or the rise of a new
Culture?
And Seymour Papert? He authored "Mindstorms: Computers, Children, and
Powerful Ideas", a tour through the visions that personal computing has in
store for the coming generation.
This spring the EECS department will offer a special topics class dealing
with the computing genre and its impact on our culture. It is not a
"computer literacy" course in the traditional sense of the word, neither
is it an EECS course in the traditional sense. There's something here to
offend everyone.
It is self-contained study of the fundamental principles of computing.
There's programming; experience with personal computers, issues of style,
ethics, and aesthetics, there's ai, there's cultural issues, philosophy,
and generally exciting hard work. It is a whirlwind tour through the next
ten years our computer-related society.